import iio
import time
import numpy as np


IN_BUFF_SIZE = 58
OUT_BUFF_SIZE = 58


ctx = iio.Context()


# def create_buff(device_name: str, size: int):
#     dev = ctx.find_device(device_name)
#     dev.set_kernel_buffers_count(1)
#     for ch in dev.channels:
#         ch.enabled = True
#
#     return iio.Buffer(dev, size)
#
#
# in_buff = create_buff('iio:device0', IN_BUFF_SIZE)
# out_buff = create_buff('iio:device1', OUT_BUFF_SIZE)
#
#
# def write(buffer: iio.Buffer, data: list[int]) -> int:
#     data = np.asarray(data, dtype=np.uint32)
#     written_len = buffer.write(bytearray(data))  # заполнение пользовательского буфера
#     buffer.push()  # загрузка пользовательского буфера на устройство
#     return written_len
#
#
# def read(buffer: iio.Buffer, count: int) -> list[int]:
#     buffer.refill()  # загрузка данных с устройства в буфер
#     data = buffer.read()  # чтение данных
#     return np.frombuffer(data, dtype=np.uint32)[:count].tolist()
#
#
# data_to_write = [0] * IN_BUFF_SIZE
# write(in_buff, data_to_write)
#
# time.sleep(1)
#
# print(read(in_buff, OUT_BUFF_SIZE))
#

def read_iq_to_file(file_path: str, buffer: iio.Buffer, count: int):
    buffer.refill()  # загрузка данных с устройства в буфер
    data = buffer.read()  # чтение данных
    iq_data = np.frombuffer(data, dtype=np.int16)[:(count*2)]
    iq_data = np.column_stack((iq_data[0::2], iq_data[1::2]))

    with open(file_path) as file:
        for iq in iq_data:
            file.write(f'{iq[0]}\t{iq[1]}\n')



iq_data = np.array(list(range(10)))
iq_data = np.column_stack((iq_data[0::2], iq_data[1::2])).tolist()


